package com.dlyk.task;

import com.dlyk.DlykServerApplication;
import com.dlyk.model.*;
import com.dlyk.service.DicTypeService;
import jakarta.annotation.Resource;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * 定时任务（这个定时任务用于定时查询字典类型数据，并放入内存当中）
 */
@EnableScheduling   // 开启定时任务
@Component
public class DataTask {

    @Resource
    private DicTypeService dicTypeService;

    // 调度的意思
    // fixedDelayString：上一次任务结束后等待指定时间执行下次任务
    // initialDelay：项目启动后延时1秒，先执行一次定时任务，然后再根据设定的时间调度定时任务
    @Scheduled(fixedDelayString = "${project.task.delay}", initialDelay = 1000, zone = "Asia/Shanghai", timeUnit = TimeUnit.MILLISECONDS)
    public void task() {

        // 定时任务要执行的业务逻辑代码
        System.out.println("定时任务业务逻辑执行......" + new Date());

        // 查询所有的字典数据
        List<DicType> dicTypeList = dicTypeService.loadAllDicData();

        // 遍历字典数据，放到内存中
        dicTypeList.forEach(dicType -> {
            // 获取字典类型
            String typeCode = dicType.getTypeCode();

            // 获取字典类型 对应所有的值
            List<DicValue> tDicValueList = dicType.getDicValueList();

            // 将 字典类型 和 对应所有的字典值 写入内存
            DlykServerApplication.cacheMap.put(typeCode, tDicValueList);
        });

    }
}

